from langchain_core.prompts import ChatPromptTemplate

# 用于总结综述主题
judge_survey_template = ChatPromptTemplate.from_template(
"""
# 角色
你是一个文献综述分类助手

# 定义
- a.对一个技术概念的调研综述,综述主题例如("损失函数")
- b.对一个方向研究现状的综述,综述主题例如("Text2SQL研究现状如何,面临哪些挑战？")
- c.对多篇文献的对比分析综述,综述主题例如("有哪些方法可以提升大模型的规划能力,各自优劣是什么？")
- d.对一个技术方法研究脉络的综述,综述主题例如("多模态大模型的技术发展路线是什么样的？")

# 任务
- 你会收到一个文献综述的编写要求,你需要判断这个编写要求是'a','b','c','d'中的哪一种
- 如果用户的要求里只有一个技术概念的名词，没有指明是什么类型的综述，那么你应该把它归为a.对一个技术概念的调研综述

# 信息
- 用户的编写要求：{user_input}

# 输出格式
- 分两行输出，第一行输出你的思考过程，第二行输出你的思考结果
- 你的思考结果以一个字符的形式输出,这个字符只能是'a','b','c','d'中的一种
"""
)

# 用于总结综述主题
theme_template = ChatPromptTemplate.from_template(
"""
# 角色
你是一个文献综述关键字总结助手

# 定义
- a.对一个技术概念的调研综述,综述主题例如("损失函数")
- b.对一个方向研究现状的综述,综述主题例如("Text2SQL研究现状如何,面临哪些挑战？")
- c.对多篇文献的对比分析综述,综述主题例如("有哪些方法可以提升大模型的规划能力,各自优劣是什么？")
- d.对一个技术方法研究脉络的综述,综述主题例如("多模态大模型的技术发展路线是什么样的？")

# 任务
- 你会收到一个文献综述的编写要求,你需要从这个要求中总结出一个技术或者方法的关键字
- 用户的编写要求分为定义中的'a','b','c','d'四种,你需要从题目中总结出最核心的概念、技术、方法的名字

# 目标
- 根据用户提供的文献综述的编写要求,总结一个关键字

# 信息
- 用户的编写要求：{user_input}

# 输出格式
- 你的输出以一个字符串的形式输出,这个字符串就是你提炼的关键字,你需要把这个关键字翻译成英语然后输出
- 如果有并列关系的术语，那么所有的并列术语都要保留在输出中, 并且注意保留术语的必要定语
- 以下是我给你的示例,注意!你只需要返回一个英文关键词,我的中文"用户输入："和"输出："只是方便你理解
# 例子
用户输入：损失函数

输出：loss function

用户输入：Text2SQL研究现状如何,面临哪些挑战？

输出：Text2SQL

用户输入：有哪些方法可以提升大模型的规划能力,各自优劣是什么？

输出：planning ability of large language models

用户输入：多模态大模型的技术发展路线是什么样的？

输出：multimodal large language model
开始任务!
"""
)

sum_paper_template = ChatPromptTemplate.from_template(
"""
# 角色
- 你是一个文献内容总结助手
# 背景
- 用户有一个需求,需要编写一份调研综述,这篇综述将要引用一个论文片段,请你先帮用户根据综述主题和章节标题总结并提炼这个论文片段的内容
- 你收到的是用户将要编写的综述主题和他要写的章节标题和一篇相关领域的论文片段
- 用户需要编写的这份综述主题是{user_input}
- 论文片段指的是'chunk_text'

# 要求
- 你的回答中需要去掉这篇引用论文片段里的中括号引用字符,避免用户在引用这篇论文时产生标记冲突,所有中括号标记必须去除,否则结果会产生严重错误!

# 准备引用的论文片段
{paper_content}

# 输出格式
- 直接输出一段话，内容为精简后的'chunk_text'
- 不要多说其他的话
- 精简后的论文内容不可以超过200个字符
- 如果论文内容是英语,那么你应该用English输出
"""
)